﻿using System;
using System.Data;
using System.Text;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Reporting.WebForms;
using GC2.Entities.Seguridad;
using GC2.Entities.Admin;

public partial class Informes_Factura : GenericPage
{
    Usuarios usuario = new Usuarios();

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];
                int iReporte = int.Parse(Session["iReporte"].ToString());
                switch (iReporte)
                {
                    case 1:
                        FacturaA();
                        break;
                    case 2:
                        FacturaB();
                        break;
                    case 3:
                        FacturaC();
                        break;
                    default:
                        break;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion

    #region Metodos

    #region FacturaA
    private void FacturaA()
    {
        try
        {
            string sMascara = Mascaras("A");
            rwFactura.LocalReport.ReportPath = sMascara;

            Ventas venta = (Ventas)Session["venta"];

            List<ReportParameter> listaParametros = new List<ReportParameter>();
            ReportParameter objParametro = new ReportParameter();
            decimal dCero = 0;

            venta.Impuesto = 0;
            venta.TTotal = 0;
            List<VentasDet> listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];
            foreach (VentasDet item in listaVentasDet)
            {
                venta.Impuesto += item.Impuesto;
                venta.TTotal += item.Impuesto;
                venta.TTotal += item.Monto;
            }
            venta.FFecha = venta.Fecha.ToString().Remove(11);

            string sComprobante = venta.Factura.ToString();


            do { sComprobante = "0" + sComprobante; } 
            while (sComprobante.Length < 7);

            
            objParametro = new ReportParameter("pPrefijo", venta.Prefijo);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pComprob", sComprobante);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pFactura", venta.FFactura);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pFecha", venta.FFecha);
            listaParametros.Add(objParametro);

            do { venta.Cliente = venta.Cliente + " "; }
            while (venta.Cliente.Length < 50);
            objParametro = new ReportParameter("pCliente", venta.Cliente);
            listaParametros.Add(objParametro);
            // Domicilio Factura
            objParametro = new ReportParameter("pDatos", venta.FDatosCliente);   
            listaParametros.Add(objParametro);
            // 
            objParametro = new ReportParameter("pCuit", venta.sCuit);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pCondIva", venta.FCondIva);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pCondVenta", venta.FCondVenta);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOrdenC", venta.FOrdenC);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOrdenT", venta.FOrdenT);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pRemito", venta.FRemito);
            listaParametros.Add(objParametro);

            string sOt = "0,00";
            objParametro = new ReportParameter("pOT1", sOt);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOT2", sOt);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOT3", sOt);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOT4", sOt);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOT5", sOt);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOTT", sOt);
            listaParametros.Add(objParametro);

            objParametro = new ReportParameter("pMonto", venta.Total.ToString());
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pNoGravados", dCero.ToString());
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pBonifica", dCero.ToString());
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pInteres", dCero.ToString());
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pSubTotal", venta.Total.ToString());
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pImpuesto", venta.Impuesto.ToString());
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pTotal", venta.TTotal.ToString());
            listaParametros.Add(objParametro);
           

            rwFactura.LocalReport.SetParameters(listaParametros);

            rwFactura.LocalReport.Refresh();

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region FacturaB
    private void FacturaB()
    {
        try
        {
            string sMascara = Mascaras("B");
            rwFactura.LocalReport.ReportPath = sMascara;

            Ventas venta = (Ventas)Session["venta"];

            List<ReportParameter> listaParametros = new List<ReportParameter>();
            ReportParameter objParametro = new ReportParameter();

            venta.Impuesto = 0;
            venta.TTotal = 0;
            List<VentasDet> listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];
            foreach (VentasDet item in listaVentasDet)
            {
                venta.Impuesto += item.Impuesto;
                venta.TTotal += item.Impuesto;
                venta.TTotal += item.Monto;

                // Para Factura B:  el precio unitario incluye impuestos
                decimal dPrecio = item.Precio + (item.Precio * item.Tasa);
                item.Precio = dPrecio;
            }
            Session["listaVentasDet"] = listaVentasDet;

            venta.FFecha = venta.Fecha.ToString().Remove(11);

            objParametro = new ReportParameter("pFactura", venta.FFactura);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pFecha", venta.FFecha);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pCliente", venta.Cliente);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pDatos", venta.FDatosCliente);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pCondVenta", venta.FCondVenta);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOrdenC", venta.FOrdenC);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOrdenT", venta.FOrdenT);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pRemito", venta.FRemito);
            listaParametros.Add(objParametro);
            
            objParametro = new ReportParameter("pTotal", venta.TTotal.ToString());
            listaParametros.Add(objParametro);


            rwFactura.LocalReport.SetParameters(listaParametros);

            rwFactura.LocalReport.Refresh();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region FacturaC
    private void FacturaC()
    {
        try
        {
            string sMascara = Mascaras("C");
            rwFactura.LocalReport.ReportPath = sMascara;

            Ventas venta = (Ventas)Session["venta"];

            List<ReportParameter> listaParametros = new List<ReportParameter>();
            ReportParameter objParametro = new ReportParameter();

            venta.Impuesto = 0;
            venta.TTotal = 0;
            List<VentasDet> listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];
            foreach (VentasDet item in listaVentasDet)
            {
                venta.TTotal += item.Monto;
            }

            venta.FFecha = venta.Fecha.ToString().Remove(11);

            objParametro = new ReportParameter("pFactura", venta.FFactura);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pFecha", venta.FFecha);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pCliente", venta.Cliente);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pDatos", venta.FDatosCliente);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pCondVenta", venta.FCondVenta);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOrdenC", venta.FOrdenC);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pOrdenT", venta.FOrdenT);
            listaParametros.Add(objParametro);
            objParametro = new ReportParameter("pRemito", venta.FRemito);
            listaParametros.Add(objParametro);

            objParametro = new ReportParameter("pTotal", venta.Total.ToString());
            listaParametros.Add(objParametro);


            rwFactura.LocalReport.SetParameters(listaParametros);

            rwFactura.LocalReport.Refresh();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion
}
